package com.guigu.gulicommon.annotations.impl;

import com.guigu.gulicommon.annotations.PageDtoDefaultValue;
import lombok.extern.log4j.Log4j2;

import java.lang.reflect.Method;

/**
 * @author 陈俊杰
 * @version 1.0
 * @since 2024/9/23 13:23
 */
@Log4j2
public class DtoDefaultValueImpl {
    public void process(Object obj) {
        Class<?> clazz = obj.getClass();
        Method[] methods = clazz.getDeclaredMethods();

        for (Method method : methods) {
            PageDtoDefaultValue defaultValueAnnotation = method.getAnnotation(PageDtoDefaultValue.class);
            if (defaultValueAnnotation != null) {
                try {
                    // 假设setter方法遵循setName(String name)这样的命名规则
                    String fieldName = method.getName().replace("set", "").substring(0, 1).toLowerCase() + method.getName().replace("set", "").substring(1);
                    // 获取字段对应的getter方法
                    Method getter = clazz.getMethod("get" + method.getName().replaceFirst("set", "get"), new Class[]{});
                    // 如果字段当前值为空，则设置默认值
                    if (getter.invoke(obj) == null) {
                        method.invoke(obj, defaultValueAnnotation.value());
                    }
                } catch (Exception e) {
                    log.error("设置默认值出错:", e);
                }
            }
        }
    }
}
